package com.shujia.scala

object Demo3Base {
  def main(args: Array[String]): Unit = {
    /**
      * 变量
      *
      * val ：不可变的变量--- 常量
      * var : 可变的变量    --- 变量
      *
      * 如果后面不会对变量进行修改使用val
      *
      * scala 变量的类型可以自动推断，根据等号右边的值，自动推断变量的类型
      * 也可以显示指定变量的类型
      */

    val str: String = "scala"
    //常量不能再指向其它的对象
    //在java中使用finla实现常量
    //str = "java"
    println(str)

    var str2: String = "hadoop"
    //可以再指向其它的对象
    str2 = "hive"
    println(str2)


    /**
      *
      * String ： scala中的字符串完全和java中一样
      *
      */

    val str3: String = "java,hadoop,spark"

    //字符串切分
    val arr: Array[String] = str3.split(",")

    println(arr)

    println("=" * 100)

    val str4: String = "1000"

    /**
      * 类型转换
      * 需要命令类型转换是否存在问题
      *
      */
    //java的方式
    val int1: Int = Integer.parseInt(str4)

    //scala的方式, scala 动态增加的f方法
    val int2: Int = str4.toInt
    val d: Double = str4.toDouble

    println(int2)

    println("=" * 100)

    /**
      * 方法（函数）
      *
      * java 中只能在类中定义方法
      * scala 可以在任何位置定义方法
      *
      */
    def add(x: Int, y: Int): Int = {
      val i = x + y
      return i
    }

    //在scala中函数可以直接调用
    val j: Int = add(100, 200)

    println(j)

    /**
      * 函数的简写
      * 1、return可以省略，最后一行会作为返回值
      * 2、如果函数只有一行代码，{}可以省略
      * 3、返回值类型可以自动推断， 根据返回值自动推断返回值类型
      * 4、如果参数列表为空，()可以省略
      *
      */
    def add1(x: Int, y: Int): Int = x + y


    val j1: Int = add1(10, 20)
    println(j1)


  }


}
